package com.belencarrasco.orm.ws;

import java.util.ArrayList;
import java.util.HashMap;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import com.belencarrasco.encrip.Encripter;
import com.belencarrasco.orm.*;
import com.belencarrasco.orm.dao.*;
import com.belencarrasco.orm.impl.*;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class ServicioPedidosORMWS {

	
	public String getPedidos(){
		String resultJSON = "";
		ArrayList<HashMap<String, Object>> listPedidos = new ArrayList<HashMap<String,Object>>();

		HashMap<String, Object> map = new HashMap<String, Object>();
		
		DAOFactory lDAOFactory = DAOFactory.getDAOFactory();
		System.out.println("Listing Pedidos...");
		Pedido[] pedidos;
		try {
			pedidos = lDAOFactory.getPedidoDAO().listPedidoByQuery(null, null);
			int length = pedidos.length;
			System.out.println(length + " record(s) retrieved.");
			for (int i = 0; i < length; i++) {
				System.out.println(pedidos[i]);
				HashMap<String, Object> mapPedidos = new HashMap<String, Object>();
				mapPedidos.put("Id", pedidos[i].getId_pedido());
				mapPedidos.put("Mesa", pedidos[i].getMesa());
				mapPedidos.put("Descripcion", pedidos[i].getDescripcion());
				mapPedidos.put("Estado", pedidos[i].getEstado());
				listPedidos.add(mapPedidos);
			}

		} catch (PersistentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Gson gson = new Gson();
		
		
		map.put("Titulo", "Pedido");
		map.put("Subtitulo", "Pedidos de restaurant");
		map.put("Fecha", "");
		map.put("Contenido", listPedidos);
		
		
		
		resultJSON = gson.toJson(map);
		
		resultJSON = Encripter.encripter(resultJSON);
		
		return resultJSON;
	}
	
	public String getPedidosPendientes(){
		String resultJSON = "";
		ArrayList<HashMap<String, Object>> listPedidos = new ArrayList<HashMap<String,Object>>();

		HashMap<String, Object> map = new HashMap<String, Object>();
		
		DAOFactory lDAOFactory = DAOFactory.getDAOFactory();
		System.out.println("Listing Pedidos...");
		Pedido[] pedidos;
		try {
			pedidos = lDAOFactory.getPedidoDAO().listPedidoByQuery(null, null);
			int length = pedidos.length;
			System.out.println(length + " record(s) retrieved.");
			for (int i = 0; i < length; i++) {
				
				if(pedidos[i].getEstado()== 0){
					System.out.println(pedidos[i]);
					HashMap<String, Object> mapPedidos = new HashMap<String, Object>();
					mapPedidos.put("Id", pedidos[i].getId_pedido());
					mapPedidos.put("Mesa", pedidos[i].getMesa());
					mapPedidos.put("Descripcion", pedidos[i].getDescripcion());
					mapPedidos.put("Estado", pedidos[i].getEstado());
					listPedidos.add(mapPedidos);
					
				}

			}

		} catch (PersistentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Gson gson = new Gson();
		
		
		map.put("Titulo", "Pedido");
		map.put("Subtitulo", "Pedidos de restaurant");
		map.put("Fecha", "");
		map.put("Contenido", listPedidos);
		
		
		resultJSON = gson.toJson(map);
		
		return resultJSON;
	}
	
	public int addPedido(String pedidoJson){
		int resultado = 0;
		
		pedidoJson = Encripter.descripter(pedidoJson);
		
		if(pedidoJson != null && !pedidoJson.isEmpty()){
			JsonParser jsonParser = new JsonParser();
			
			JsonObject pedido = jsonParser.parse(pedidoJson).getAsJsonObject();
			//Validar parametros recibidos no nulos
			
			System.out.println(pedidoJson);
			if(pedido.has("mesa") && pedido.has("descripcion") && pedido.has("estado") ){
				//Obtine Clasificacion y Genero

				PersistentTransaction t = null;
				try {
					t = SistemaPedidosPersistentManager.instance().getSession().beginTransaction();
					DAOFactory lDAOFactory = DAOFactory.getDAOFactory();				
						
					Pedido nuevaPedido = new Pedido();
					nuevaPedido.setMesa(pedido.get("mesa").getAsString());
					nuevaPedido.setDescripcion(pedido.get("descripcion").getAsString());
					nuevaPedido.setEstado(pedido.get("estado").getAsInt());
					lDAOFactory.getPedidoDAO().save(nuevaPedido);
					resultado = 1;
					
					t.commit();
				} catch (PersistentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					try {
						t.rollback();
					} catch (PersistentException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		}
		return resultado;
	}
	
	public int updatePedido(String pedidosJson){
		int resultado = 0;
		if(pedidosJson != null && !pedidosJson.isEmpty()){
			JsonParser jsonParser = new JsonParser();
			JsonObject pedidos = jsonParser.parse(pedidosJson).getAsJsonObject();
			//Validar parametros recibidos no nulos
			System.out.println(pedidosJson);
			if(pedidos.has("id") && pedidos.has("mesa") && pedidos.has("descripcion") 
					&& pedidos.has("estado")){
				//Obtine Clasificacion y Genero
				PersistentTransaction t = null;
				try {
					t = SistemaPedidosPersistentManager.instance().getSession().beginTransaction();
					DAOFactory lDAOFactory = DAOFactory.getDAOFactory();



					PedidoDAO pedidoDAO = lDAOFactory.getPedidoDAO();
					Pedido upPedido = pedidoDAO.loadPedidoByQuery("Pedido.id_pedido = " + pedidos.get("id").getAsInt(),null);

					if( upPedido != null){
					
						upPedido.setMesa(pedidos.get("mesa").getAsString());
						upPedido.setDescripcion(pedidos.get("descripcion").getAsString());
						upPedido.setEstado(pedidos.get("estado").getAsInt());
	
						pedidoDAO.save(upPedido);
						resultado = 1;
					}
					t.commit();
				} catch (PersistentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					try {
						t.rollback();
					} catch (PersistentException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}finally{
					try {
						SistemaPedidosPersistentManager.instance().getSession().flush();
						SistemaPedidosPersistentManager.instance().disposePersistentManager();
					} catch (PersistentException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}

		System.out.println(resultado);
		return resultado;
	}
}
